{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对subsample和 colsample进行调优\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "import pickle\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline\n",
    "\n",
    "#读取数据\n",
    "dbpath = \"./data/\"\n",
    "train = pd.read_csv(dbpath +\"RentListingInquries_FE_train.csv\")\n",
    "\n",
    "y_train = train['interest_level']\n",
    "X_train = train.drop([\"interest_level\",\"Year\"],axis=1)\n",
    "                    \n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)\n",
    "\n",
    "#第二阶段取到n_estimater210\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best param: {'subsample': 0.8, 'colsample_bytree': 0.9}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12b2bf60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "xgb = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=210,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "'''\n",
    "此部分代码运行完毕，从结果文件中直接读取数据\n",
    "gsearch = GridSearchCV(xgb, param_grid = param_test, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch.fit(X_train , y_train)\n",
    "gsearch.grid_scores_, gsearch.best_params_,     gsearch.best_score_\n",
    "print(\"Best: %f using %s\" % (gsearch.best_score_, gsearch.best_params_))\n",
    "#存入文件中\n",
    "pd.DataFrame(gsearch.cv_results_).to_csv(\"RLI_sub_col_sample.csv\")\n",
    "fparamgrid = open(\"RTL_sub_col_sample.pickle\",\"wb\")\n",
    "pickle.dump(gsearch.best_params_,fparamgrid,-1)\n",
    "fparamgrid.close()\n",
    "'''\n",
    "\n",
    "#从文件中读取数据\n",
    "cvresults = pd.read_csv(\"RLI_sub_col_sample.csv\")\n",
    "fparamgrid = open(\"RTL_sub_col_sample.pickle\",\"rb\")\n",
    "bestparam = pickle.load(fparamgrid)\n",
    "fparamgrid.close()\n",
    "\n",
    "print(\"Best param: %s\" % bestparam)\n",
    "test_means =cvresults[ 'mean_test_score' ]\n",
    "test_stds = cvresults ['std_test_score' ]\n",
    "train_means = cvresults[ 'mean_train_score' ]\n",
    "train_stds = cvresults[ 'std_train_score' ]\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "#pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
